VINS-Fusion评估
记录一下评估VINS-Fusion的过程
EVO安装
evo是一款用于视觉里程计和slam问题的轨迹评估工具。
核心功能是能够绘制相机的轨迹,或评估估计轨迹与真值的误差。
链接:https://github.com/MichaelGrupp/evo
ubuntu18.04安装:
pip3 install evo --upgrade --no-binary evo
配置VINS-Fusion输出
以单目+IMU为例,配置文件在VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml
其中的output_path就是结果csv文件保存路径,pose_graph_save_path就是位姿图保存路径
(tips: ①注意改为绝对路径,不要用带~根目录,不然后续保存不成功 ②路径最后要加/ ③ 提前创建好文件夹)
修改完重新运行代码,等待运行完,在运行loop_fusion的终端,按s后回车,等待保存
需要40s左右的时间,最后有显示保存时间即为保存成功,在对应路径就可以找到输出的文件
cd ~/catkin_ws
roslaunch vins vins_rviz.launch
rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml
rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml
rosbag play ~/catkin_ws/src/VINS-Fusion/datasets/MH_01_easy.bag
改变VINS-Fusion输出格式
经过上述配置,我们获得了VINS-Fusion的输出vio.csv和vio_loop.csv
但是这两个文件并没办法直接使用,因为每一行的末尾都有一个逗号
有两种办法:① 修改输出代码 ② 直接对输出文件去逗号
修改代码
代码修改会相对比较麻烦,但是方便后续拓展
①修改vio.csv的保存
文件所在路径:VINS-Fusion/vins_estimator/src/utility/visualization.cpp
定位位置:搜索foutC
保存的数据格式为:时间戳*1e9,位置xyz,旋转四元数wxyz,速度xyz
我们需要把行末的逗号去掉
②修改vio_loop.csv的保存
文件所在路径:VINS-Fusion/loop_fusion/src/pose_graph.cpp
定位位置:搜索SAVE_LOOP_PATH
保存的数据格式为:时间戳*1e9,位置xyz,旋转四元数wxyz
我们需要把行末的逗号去掉(有两段一样的要改)
③重新编译运行后保存
直接对输出文件去逗号
这个命令代表全局搜索(g)将行末的逗号(,$)替换掉并保存
sed -i 's/,$//g' vio.csv
sed -i 's/,$//g' vio_loop.csv
如果想保存在新文件可以写成这样
sed -e 's/,$//g w vio_new.csv' vio.csv
评估
格式转换
经过上述步骤,获得了可以用于评估的vio.csv和vio_loop.csv
可以先转化成tum格式文件,方便后续评估没有报错
转化后数据会只剩下(时间戳*1e9,位置xyz,旋转四元数wxyz)
# 转换GT文件为tum
cd ~/catkin_ws/src/VINS-Fusion/datasets/MH_01_easy/mav0/state_groundtruth_estimate0
evo_traj euroc data.csv --save_as_tum
# 转换vio文件为tum
cd ~/catkin_ws/src/VINS-Fusion/output
evo_traj euroc vio.csv --save_as_tum
# 转换vio_loop文件为tum
cd ~/catkin_ws/src/VINS-Fusion/output
evo_traj euroc vio_loop.csv --save_as_tum
绘制轨迹
可以绘图显示单个结果文件
cd ~/catkin_ws/src/VINS-Fusion/
evo_traj tum ./output/vio.tum -p
evo_traj tum ./output/vio_loop.tum -p
(我这边提示没有tkinter,安装即可)
sudo apt-get install python3-tk
绝对误差评估
cd ~/catkin_ws/src/VINS-Fusion/
mkdir ./evolution
evo_ape tum \
./datasets/MH_01_easy/mav0/state_groundtruth_estimate0/data.tum \
./output/vio.tum \
-va \
-p --plot_mode xy \
--save_plot ./evolution/vio_plot \
--save_results ./evolution/vio_result.zip
evo_ape tum \
./datasets/MH_01_easy/mav0/state_groundtruth_estimate0/data.tum \
./output/vio_loop.tum \
-va \
-p --plot_mode xy \
--save_plot ./evolution/vio_loop_plot \
--save_results ./evolution/vio_loop_result.zip
保存图片的路径应该是字符串拼接的,可以给图片名加前缀,如果要保存在文件夹内最后要加上/
一定要-a轨迹对齐,-v表示详细输出
轨迹对比评估
差值评估还是没有轨迹图对比评估来得直观
evo_traj tum \
./datasets/MH_01_easy/mav0/state_groundtruth_estimate0/data.tum \
./output/vio.tum \
-a --ref ./datasets/MH_01_easy/mav0/state_groundtruth_estimate0/data.tum \
-v -p
对比评估
mkdir ./evolution/comparison
evo_res ./evolution/*.zip \
-p --save_plot ./evolution/comparison/ \
--save_table ./evolution/comparison/table.csv